<?php

namespace app\admin\controller;

use app\common\controller\Backend;

/**
 * PLC控制器
 *
 * @icon fa fa-microchip
 */
class Plc extends Backend
{

    /**
     * Plc模型对象
     * @var \app\admin\model\Plc
     */
    protected $model = null;

    public function _initialize()
    {
        parent::_initialize();
        // 这里可以初始化模型，如果不需要数据库操作可以注释掉
        // $this->model = new \app\admin\model\Plc;
    }

    /**
     * PLC数据分析仪表板
     * 支持根据URL参数动态加载不同视图
     * @return string
     */
    public function index()
    {
        // 获取URL参数，支持动态视图
        $viewName = $this->request->param('view', 'index');

        // 清理视图名称，移除可能的URL参数
        $viewName = $this->cleanViewName($viewName);

        // 检查视图文件是否存在
        $viewPath = APP_PATH . 'admin/view/plc/' . $viewName . '.html';

        if (!file_exists($viewPath) && $viewName !== 'index') {
            // 如果视图文件不存在且不是默认index，则使用默认视图
            $viewName = 'index';
        }

        // 根据视图名称传递不同的数据
        $viewData = $this->getViewData($viewName);
        $this->view->assign($viewData);

        return $this->view->fetch($viewName);
    }

    /**
     * 清理视图名称，移除URL参数
     * @param string $viewName 原始视图名称
     * @return string 清理后的视图名称
     */
    protected function cleanViewName($viewName)
    {
        // 移除问号及其后面的所有内容
        if (strpos($viewName, '?') !== false) {
            $viewName = substr($viewName, 0, strpos($viewName, '?'));
        }

        // 移除其他可能的问题字符
        $viewName = preg_replace('/[^a-zA-Z0-9_-]/', '', $viewName);

        return $viewName;
    }

    /**
     * 根据视图名称获取对应的数据
     * @param string $viewName 视图名称
     * @return array
     */
    protected function getViewData($viewName)
    {
        $data = [
            'title' => 'PLC数据分析仪表板',
            'description' => '实时监控和分析PLC设备运行数据',
            'view_name' => $viewName
        ];

        switch ($viewName) {
            case 'aaa':
                $data = array_merge($data, [
                    'title' => 'PLC高级分析视图',
                    'description' => 'PLC设备的高级数据分析和统计',
                    'total_plc_count' => 12,
                    'online_count' => 9,
                    'offline_count' => 3,
                    'special_feature' => '这是AAA视图的特殊功能'
                ]);
                break;

            case 'bbb':
                $data = array_merge($data, [
                    'title' => 'PLC性能监控',
                    'description' => 'PLC设备性能监控和优化分析',
                    'total_plc_count' => 15,
                    'online_count' => 12,
                    'offline_count' => 3,
                    'performance_data' => '性能监控数据'
                ]);
                break;

            default: // index 视图
                $data = array_merge($data, [
                    'total_plc_count' => 8,
                    'online_count' => 6,
                    'offline_count' => 2
                ]);
                break;
        }

        return $data;
    }

    /**
     * 获取PLC状态
     */
    public function getStatus()
    {
        // 模拟获取PLC状态
        $status = [
            'plc_count' => 3,
            'online_count' => 2,
            'offline_count' => 1,
            'last_update' => date('Y-m-d H:i:s')
        ];

        $this->success('获取PLC状态成功', null, $status);
    }

    /**
     * 测试PLC连接
     */
    public function testConnection()
    {
        $plcId = $this->request->param('id', 0);

        // 模拟测试PLC连接
        if ($plcId > 0) {
            $result = [
                'plc_id' => $plcId,
                'connection_status' => 'success',
                'response_time' => rand(10, 100) . 'ms',
                'message' => 'PLC连接测试成功'
            ];
            $this->success('连接测试成功', null, $result);
        } else {
            $this->error('请选择要测试的PLC设备');
        }
    }

    /**
     * 默认生成的控制器所继承的父类中有index/add/edit/del/multi五个基础方法、destroy/restore/recyclebin三个回收站方法
     * 因此在当前控制器中可不用编写增删改查的代码,除非需要自己控制这部分逻辑
     * 需要将application/admin/library/traits/Backend.php中对应的方法复制到当前控制器,然后进行修改
     */
}